//抽离用户路由模块中的处理函数


//导入数库用户的数据
const db = require('../db/index')

//导入配置文件
const config = require('../config')

//生成token字符串
const jwt = require('jsonwebtoken')

//加蜜密码
const bcrypt = require('bcryptjs')

//注册
const regUser = (req, res) => {
    //获取客户端提交到服务器端用户信息
    const userinfo = req.body

    let { username, password } = req.body
    //对表单中的数据，进行合法性的校验
    if (!username || !password) return res.cc(err)




    //校验名字是否存在
    const sql = 'select * from ev_users where username=?'
    //执行 SQL 语句并根据结果判断用户名是否被占用：
    db.query(sql, username, (error, results) => {
        if (error) return res.cc(error)

        if (results.length > 0) return res.cc('用户名被占用，请更换')

        //对密码进行加密
        password = bcrypt.hashSync(password, 10)

        //插入操作
        const sql = 'insert into ev_users set ?'
        db.query(sql, { username, password }, (err, results) => {
            if (err) return res.cc(err)
            if (results.affectedRows !== 1) return res.cc('用户注册失败')
            res.cc('用户注册成功',0)
        })

    })

}
//登录
const login = (req, res) => {
    const { username, password } = req.body
    const sql = `select * from ev_users where username=?`

    db.query(sql, username, (err, results) => {
        if (err) return res.cc(err)

        //判断用户输入的密码是否正确
        console.log(results)
        if (results.length !== 0) {

            // 拿着用户输入的密码,和数据库中存储的密码进行对比
            const compareResults = bcrypt.compareSync(password, results[0].password)
            // const compareResult = bcrypt.compareSync(password, results[0].password)

            // 如果对比的结果等于 false, 则证明用户输入的密码错误
            if (!compareResults) return res.cc('登录失败')

            // 剔除完毕之后，user 中只保留了用户的 id, username, nickname, email 这四个属性的值
            const user = { ...results[0], password: '', user_pic: '' }

            // 生成 Token 字符串
            const tokenStr = jwt.sign(user, config.jwtSecretKey, {
                expiresIn: '10h', // token 有效期为 10 个小时
            })

            // 将生成的 Token 字符串响应给客户端：
            res.send({
                status: 0,
                message: '登录成功！',
                // 为了方便客户端使用 Token，在服务器端直接拼接上 Bearer 的前缀
                token: `Bearer ${tokenStr}`
            })
        } else {
            res.send({
                status: 1,
                message: '请先注册',
            })
        }
    })



}

//暴露出去
module.exports = {
    regUser,
    login
}